#ifndef _CONFIG_H__
#define _CONFIG_H__
/* 全局配置文件 */

/* dq轴电流环指令斜波 */
#define CONFIG_CURRENT_LOOP_RAMP_COUNT 10 //10个控制周期 完成ramp给定
#define CONFIG_CURRENT_LOOP_RAMP_STEP_MIN (30)//单位 A，ramp step 不小于step min

/* dq轴电压指令斜波 */
#define CONFIG_FOC_VDQ_RAMP_TS 100
#define CONFIG_FOC_VDQ_RAMP_FINAL_TIME 1000

/* 捏住刹车超过这个时间，启动autohold功能 */
#define CONFIG_AUTOHOLD_DETECT_TIME 2000

/* 定速巡航的时候给定加减速的斜波时间 */
#define CONFIG_VEL_LOOP_RAMP_TIME 1000

/* 默认扭矩给定的斜波时间，设置挡位后，由挡位的参数控制 */
#define CONFIG_DEFAULT_TORQUE_RAMP_TIME 1000

/* 扭矩给定的斜波时间计算得到的step不应小于本数据，否则去本数据 */
#define CONFIG_DEFAULT_TORQUE_RAMP_MIN 1.0f

/* 限制扭矩，母线电流，速度 的斜波时间 */
#ifdef USE_MEX_CMD
#define CONFIG_LIMIT_RAMP_TIME 10
#else
#define CONFIG_LIMIT_RAMP_TIME (6 * 1000) /* 过温、欠压保护的给定限流和限速的斜波时间 */
#endif

/* 电机标定参数给定的斜波时间 */
#define CONFIG_MTPA_CALI_RAMP_TIME (5 * 1000)

/* IF启动模式下电流给定的斜波时间 */
#define CONFIG_IF_CURRENT_RAMP_TIME (20)

/* 电流环模式下的电流给定斜波时间 */
#define CONFIG_DEFAULT_CURRENT_RAMP_TIME (4 * 1000)

/* 母线电流采集低通滤波截止频率 */
#define CONFIG_DC_CURR_LPF_CUTOFF_FREQ (20)

/* 是否对alpha，beta做死区补偿（这个补偿只在无感和电机参数辨识的时候使用） */
#define CONFIG_DEADTIME_COMPENSATION 0

/* 是否对电压命令做延时补偿, 给无感算法使用 */
#define CONFIG_ALPBABETA_DELAY_COMPENSATION 1

/* 速度环，slow task的运行间隔，ms为单位 */
#define CONFIG_SPEED_CTRL_TS 1000

/* 扭矩和相电流是否等效，没有做扭矩标定需要 定义为1， 否则可以定义为0 */
#define CONFIG_CURRENT_INSTEAD_TORQUE 1

/* 是否使能扭矩过零处理，防止电机打齿（边挂电机一定要开启） */
#define CONFIG_CROSS_ZERO_TORQUE_ENABLE 0

/* 是否补偿相电压采集的延时，从计算到pwmupdate，到采集，一共1.5个TS，补偿后因为相电流没有补偿，
 *会导致计算母线功率不准确，这个补偿可以放到观测器中，如果观测器使用了采集的相电压
 */
#define CONFIG_PHASE_VOL_SAMPLE_DELAY_CPM 0

/* 生成的电压矢量需要在下一个timer 的update才更新，在电频率较高的时候需要开启补偿 */
#define CONFIG_PHASE_VOL_COMPENSATION_VEL 500// rpm, 0x7FFF:disable, other(low than max velocity):enable
#define CONFIG_PHASE_VOL_COMPENSATION_TIME 1.5F //number of ts， sigle sample&sigel update(1.5)

/* 是否使能ladrc观测器 */
#define CONFIG_LADRC_OBSERVER 1
#define CONFIG_LADRC_OBSERVER_MIN_SPEED    1000 //RPM
#define CONFIG_LADRC_OBSERVER_MIN_eVEL 400
#define CONFIG_LADRC_OBSERVER_MIN_Wo   (200)
#define CONFIG_LADRC_OBSERVER_LPF_FREQ (100)

/* 是否使能滑膜观测器 */
#define CONFIG_SMO_OBSERVER 0
#define CONFIG_SMO_MIN_SPEED	1000 //RPM
#define CONFIG_SMO_PLL_BANDWITH (200.0f) //计算速度的pll
#define CONFIG_SMO_LFP_MIN_HZ		 (10.0F)
#define CONFIG_SMO_GAIN_K		 60.0f
#define CONFIG_SMO_SIGMOID_MAX	 80.0F

/* 是否使能高频注入 */
#define CONFIG_HFI_OBSERVER 0
#define CONFIG_HFI_PLL_BANDWITH 200.0f
#define CONFIG_HFI_VEL_LPF_HZ 200.0f
#define CONFIG_HFI_VD_AMP   10 /* 注入电压幅值 */
#define CONFIG_HFI_REPEAT   1  /* inject freq pwm freq/(CONFIG_HFI_REPEAT+1) */

/* 通过hall计算的速度作为前馈，基于电压模型的观测器*/
#define CONFIG_HALL_OBSERVER 0
#define CONFIG_HALL_OBSERVER_PLL_BW 150
#define CONFIG_HALL_OBSERVER_W_LPF_Wc 50

/* 扰动观测器和它的阶数， 2阶主要观测负载转矩和做速度滤波，3阶可以替换encoder的PLL锁相环 */
#define CONFIG_Disturbance_OBSERVER 1
#define CONFIG_Disturbance_OBS_ORDER 2

/* 定速巡航可以加速，油门回退，继续定速巡航 */
#define CONFIG_CRUISE_ENABLE_ACCL 1

/* 是否打开相电流/电压记录，for debug */
#define CONFIG_ENABLE_IAB_REC 0

/* 能进入速度环的最小速度 */
#define CONFIG_MIN_VEL_LOOP_RPM 1000

/* 可以安全操作的最低速度 */
#define CONFIG_ZERO_SPEED_RPM 10

/* 从0速启动到结束的速度 */
#define CONFIG_ZERO_SPEED_RAMP_RMP 60

/* 是否采用offset的SVPWM 计算方式 */
#define CONFIG_SVPWM_OFFSET_METHOD   0

/* 0:diable, nor 0 step value */
#define CONFIG_DQ_CURRENT_STEP 0

#define CONFIG_POWER_LOOP_AUTO_TUNING 1
#define CONFIG_POWER_LOOP_MAX_KP 10
#define CONFIG_POWER_LOOP_MIN_KP 1

/* 进入电流回收的最小转速 */
#define CONFIG_MIN_RPM_FOR_EBRAKE 800
/* 退出电流回收的最小转速 */
#define CONFIG_MIN_RPM_EXIT_EBRAKE 250

/* 判断堵转的最大相电流的百分比 */
#define CONFIG_STALL_CURRENT_RATION   0.8f
/* 超过最大堵转电流持续时间，判断堵转(ms) */
#define CONFIG_STALL_MAX_TIME      3000
/* 清除堵转标志的迟滞时间 */
#define CONFIG_STALLED_RELASE_TIME 2000

/* 调试 timer up中断的触发时机，adc的触发时机是否合理 */
#define CONFIG_DEBUG_ADC_TIMER_TRIGGER 0

#endif /* _CONFIG_H__ */
